package com.zxm.edu.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zxm.edu.dto.*;
import com.zxm.edu.entity.Article;
import com.zxm.edu.vo.*;
import com.zxm.edu.dto.*;
import com.zxm.edu.vo.*;

import java.util.List;

/**
 * 资讯服务
 *
 * @author silencezheng
 * @date 2021/07/29
 */
public interface ArticleService extends IService<Article> {

    /**
     * 查询资讯归档
     *
     * @return 资讯归档
     */
    PageResult<ArchiveDTO> listArchives();

    /**
     * 查询后台资讯
     *
     * @param condition 条件
     * @return 资讯列表
     */
    PageResult<ArticleBackDTO> listArticleBacks(ConditionVO condition);

    /**
     * 查询首页资讯
     *
     * @return 资讯列表
     */
    List<ArticleHomeDTO> listArticles();

    /**
     * 根据条件查询资讯列表
     *
     * @param condition 条件
     * @return 资讯列表
     */
    ArticlePreviewListDTO listArticlesByCondition(ConditionVO condition);

    /**
     * 搜索资讯
     *
     * @param condition 条件
     * @return 资讯列表
     */
    List<ArticleSearchDTO> listArticlesBySearch(ConditionVO condition);

    /**
     * 根据id查看后台资讯
     *
     * @param articleId 资讯id
     * @return 资讯列表
     */
    ArticleVO getArticleBackById(Integer articleId);

    /**
     * 根据id查看资讯
     *
     * @param articleId 资讯id
     * @return {@link ArticleDTO} 资讯信息
     */
    ArticleDTO getArticleById(Integer articleId);

    /**
     * 点赞资讯
     *
     * @param articleId 资讯id
     */
    void saveArticleLike(Integer articleId);

    /**
     * 添加或修改资讯
     *
     * @param articleVO 资讯信息
     */
    void saveOrUpdateArticle(ArticleVO articleVO);

    /**
     * 修改资讯置顶
     *
     * @param articleTopVO 资讯置顶信息
     */
    void updateArticleTop(ArticleTopVO articleTopVO);

    /**
     * 删除或恢复资讯
     *
     * @param deleteVO 逻辑删除对象
     */
    void updateArticleDelete(DeleteVO deleteVO);

    /**
     * 物理删除资讯
     *
     * @param articleIdList 资讯id集合
     */
    void deleteArticles(List<Integer> articleIdList);

    /**
     * 导出资讯
     *
     * @param articleIdList 资讯id列表
     * @return {@link List}<{@link String}> 文件地址
     */
    List<String> exportArticles(List<Integer> articleIdList);
}
